package com.mh.common.core.controller;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.mh.common.constant.HttpStatus;
import com.mh.common.core.domain.BaseResp;
import com.mh.common.core.page.PageDomain;
import com.mh.common.core.page.PageResult;
import com.mh.common.utils.ServletUtils;

import java.util.List;

//Controller基类
public class BaseController {

    //定义常量属性
    public static final String PAGE_NUM = "pageNum"; //当前页数
    public static final String PAGE_SIZE = "pageSize"; //每页的数据条数

    //公用方法1: 分页查询响应相关
    //方法1-1: 封装分页数据
    public static PageDomain getPageDomain() {
        //分页数据封装到自己写的PageDomian类中
        PageDomain pd = new PageDomain();
        //controller层的分页数据封装到基类
        pd.setPageNum(ServletUtils.getParameterToInt(PAGE_NUM));
        pd.setPageSize(ServletUtils.getParameterToInt(PAGE_SIZE));

        return pd;
    }

    //方法1-2: 开启使用PageHelper分页插件-->protected修饰,只给自己的子类用此方法
    protected void  startPage(){
        PageDomain pd = getPageDomain(); //getPageDomain()前省略了this-->此方法是上面的方法1
        Integer num = pd.getPageNum();
        Integer size = pd.getPageSize();

        if(num != null && size != null){
            PageHelper.startPage(num,size);
        }
    }

    //方法1-3: 封装响应分页数据
    protected PageResult getData(List<?> list){
        //创建响应对象封装用类PageResult的对象
        PageResult result = new PageResult();
        //给各个属性设置值
        result.setCode(HttpStatus.SUCCESS);
        result.setMsg("分页查询成功");
        result.setRows(list); //查询结果集
        result.setTotal(new PageInfo(list).getTotal()); //PageInfo(结果集)对象.getTotal()-->可以获取总数据条数

        return result;
    }


    //公用方法2: 普通响应
    //方法2-1: 响应结果返回(增删改), 形参:受影响行数
    protected BaseResp toAjax(int rows){
        //三目表达式-->受影响行数大于0,表示操作成功,返回影响函数;否则返回"操作失败"字符串
        return rows>0 ? BaseResp.success(rows) : BaseResp.error("操作失败");
    }
}
